package com.bgybmi.sms;


import com.db.util.DBOper;
import com.jfinal.kit.PropKit;
import com.jfinal.qyweixin.sdk.api.ApiConfig;
import com.jfinal.qyweixin.sdk.api.ApiConfigKit;
import com.jfinal.qyweixin.sdk.api.ApiResult;
import com.jfinal.qyweixin.sdk.api.SendMessageApi;
import com.jfinal.qyweixin.sdk.msg.send.QiYeTextMsg;
import com.jfinal.qyweixin.sdk.msg.send.Text;



public class SmsToWeiXin {
	
	public SmsToWeiXin(){		
		new Thread(new Runnable(){
			@Override
			public void run() {
				int time_delay = 3000;
				try {
					Thread.sleep(time_delay*10);
					loadProp("a_little_config_pro.txt", "a_little_config.txt");
					ApiConfigKit.setThreadLocalApiConfig(getApiConfig());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				while(true){
					try {
						receiveSms();
						Thread.sleep(time_delay);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
	
	private void receiveSms(){
		String[][] items = DBOper.getMulColReturnValue("select id,msg from t_sms_in where process=0");
		if (items == null){
			return;
		}
		QiYeTextMsg text=new QiYeTextMsg();
		text.setAgentid("0");		
		text.setSafe("0");					
		for (int row=0;row<items.length;row++){
			String id  = items[row][0];
			String msg = items[row][1];
			text.setTouser("smander");   //设置发送给那个家伙
			text.setText(new Text(msg)); //可以解析把来自同一批次的消息一起发送避免循环给不同的人
			ApiResult sendTextMsg = SendMessageApi.sendTextMsg(text);
			System.out.println("消息发送结果返回值: " + sendTextMsg.getJson());			
			DBOper.updateRecord("update t_sms_in set process=1 where id=" + id);//判断结果是否正确，然后设置标志位，避免老是发送
		}			
	}
	
	/**
	 * 如果生产环境配置文件存在，则优先加载该配置，否则加载开发环境配置文件
	 * @param pro 生产环境配置文件
	 * @param dev 开发环境配置文件
	 */
	private void loadProp(String pro, String dev) {
		try {
			PropKit.use(pro);
		}
		catch (Exception e) {
			PropKit.use(dev);
		}
	}
	
	/**
	 * 如果要支持多公众账号，只需要在此返回各个公众号对应的  ApiConfig 对象即可
	 * 可以通过在请求 url 中挂参数来动态从数据库中获取 ApiConfig 属性值
	 */
	private ApiConfig getApiConfig() {
		ApiConfig ac = new ApiConfig();		
		// 配置微信 API 相关常量
		ac.setToken(PropKit.get("token"));
		ac.setCorpId(PropKit.get("corpId"));
		ac.setCorpSecret(PropKit.get("secret"));						
		/**
		 *  是否对消息进行加密，对应于微信平台的消息加解密方式：
		 *  1：true进行加密且必须配置 encodingAesKey
		 *  2：false采用明文模式，同时也支持混合模式
		 */
		ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
		ac.setEncodingAesKey(PropKit.get("encodingAesKey", "在配置文件中设置该属性"));
		return ac;
	}	
}
